In order to handle complexity, large computing systems are generally built using the principle of separation of concerns. Different services or aspects are considered separately before integration. For instance, software and hardware aspects of a computing system may be considered separately before integration, or the functional, availability, performance or security aspects can be considered separately before integration. The separation of concerns principle eases the development process and increases reusability even if the integration may pose its own challenges. As the different aspects or services are considered separately, their respective configurations are also developed separately.
It is a challenge to integrate these configurations into a consistent system configuration to avoid conflicting management actions or actions from one aspect that may lead to malfunctioning of other aspects. The complexity of this integration stems from the potential overlap between the entities of the different aspect configurations (i.e. different logical representations of the same entity) and from the complex relationships among the entities of these different configurations, also referred to as configuration fragments. It is also a challenge for the resulting system to meet the targeted properties of the different aspects, such as availability, performance, security, etc.